package fi.uba.algocontrol.model.aviones;

import fi.uba.algocontrol.model.Vector;

public class AvionHelicoptero extends AvionSimple
{
    Integer velocidadMovimiento = null;
    Vector puntoFinal;

    public AvionHelicoptero(Vector posicion, Integer velocidad, Vector direccion) {
        super(posicion, velocidad, direccion);
        this.velocidadMovimiento = velocidad;
    }

    public void detenerse()
    {
        this.velocidad = 0;
    }
    
    // este metodo retomaria el movimiento (era "moverse()")
    private void desplazarse(){
    	this.velocidad = velocidadMovimiento;
    }

    // redefino este metodo porque necesito el punto final de la trayectoria
    public void mirarPunto( Vector punto )
    {
        puntoFinal = new Vector ((punto.getX()),(punto.getY()));
        this.direccion = punto.substract(this.posicion).getNormalizado();
   
    }
    
    public void moverse()
    {			

    	if (puntoFinal == null) {
            this.posicion.setX( this.posicion.getX() + this.direccion.getX()*this.velocidad );
            this.posicion.setY(this.posicion.getY() + this.direccion.getY() * this.velocidad);
    	} else {
    		Vector posicionInicial = new Vector (this.posicion.getX(),this.posicion.getY());
        	Vector direccionInicial = (puntoFinal.substract(posicionInicial));
        	
	    	// esta primera sentencia pregunta si el movimiento ya fue modificado y todavia no llego a destino 
	    	// o si aun no fue modificado, por lo que no tiene un destino marcado
	    	if ((puntoFinal.substract(this.posicion).getNorma()) > 1 ){
	    		this.desplazarse();
	    		direccionInicial.setX(direccionInicial.getX()/ this.velocidad); // aca por dividir sobre la velocidad se me va rapido
	    		direccionInicial.setY(direccionInicial.getY()/ this.velocidad);
	        	
	    		this.posicion.setX(this.posicion.getX()+(direccionInicial.getX()));
	    		this.posicion.setY(this.posicion.getY()+(direccionInicial.getY()));
	
	    	} else {
	        	this.detenerse();
	
	    	}
    	}
    }
}
